android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?...

您所在的位置:网站首页 android 接口回调 android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?...

android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?...

2023-08-16 03:18| 来源: 网络整理| 查看: 265

为什么这个用于回调的匿名内部类实例不会导致活动泄漏

我假设你在这里的意思是它不会导致内存泄漏,但它肯定可以,因为你实例化匿名Callback是一个Activity 。

如果在Android Activity实例化一个内部类,然后将对该实例的引用传递给其他组件,只要该组件可以访问,那么内部类的实例也是如此。 例如,考虑一下:

class MemorySink { static private Listcallbacks = new ArrayList(); public static void doSomething(Callback callback){ callbacks.add(callback); } }

如果您从某些活动创建了Callback实例并将它们传递给doSomething(callback) ,当其中一个Activity被销毁时,系统将不再使用该实例,预计垃圾收集器将释放该实例。 但是,如果MemorySink在这里引用了一个对该Activity有引用的Callback ,那么该Activity的实例即使在被销毁之后也会保留在内存中。 Bam,内存泄漏。

所以你说你的样本没有引起内存泄漏,我首先建议你试试MemorySink ,创建一个简单的Activity “MainActivity”,带有2个按钮,可能还有一些图像来增加内存占用。 在onCreate ,在第一个按钮上设置一个监听器:

findViewById(R.id.firstButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainA



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3